package com.hzc.mapper;

import com.hzc.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author flowerWorm
 * @createTime 2022年05月21日 21:34:00
 * 首先明确这个注解是为SQL语句中参数赋值而服务的。
 *
 * @Param的作用就是给参数命名，比如在mapper里面某方法A（int id），当添加注解后A（@Param("userId") int id），
 * 也就是说外部想要取出传入的id值，只需要取它的参数名userId就可以了。将参数值传如SQL语句中，通过#{userId}进行取值给SQL的参数赋值。
 *  当使用了@Param注解来声明参数的时候，SQL语句取值使用#{}，${}取值都可以。
 *  当不使用@Param注解声明参数的时候，必须使用的是#{}来取参数。使用${}方式取值会报错。
 *  当不使用@Param注解时，参数只能有一个，并且是Javabean。在SQL语句里可以引用JavaBean的属性，而且只能引用JavaBean的属性。
 */
public interface UserMapper {

    /**
     * url	/user/selectUserPage?userName=z&userSex=男&page=null
     * 参数	userName:表单中用户名称
     * userSex:表单中用户性别
     * page:提交的页码(第一次访问为null)
     * 结果	有数据时：
     * [{
     * "userId":"15968954638794962",
     * "cardType":"身份证","
     * cardNo":"343343554654",
     * "userName":"撒撒旦",
     * "userSex":"女",
     * "userAge":"29",
     * "userRole":"生产、运输设备操作人员及有关人员"},
     * {….}
     * ]
     * 无数据时：
     * []
     */
    List<User> selectUserPage(@Param("userName") String userName, @Param("userSex") String userSex, @Param("startRow") int startRow);

    /**
     * url	/user/createUser(参数见下面)
     * 参数
     * cardType: this.ruleForm.cardType,//证件类型
     * cardNo: this.ruleForm.cardNo,//证件号码
     * userName: this.ruleForm.userName,//用户姓名
     * userSex: this.ruleForm.userSex,//用户性别
     * userAge: this.ruleForm.userAge,//用户年龄
     * userRole: this.ruleForm.userRole,//用户角色
     * 结果	增加成功时：
     * 1
     * 增加失败时:
     * 0
     */
    int createUser(User user);

    /**
     * url	/user/ deleteUserById?userId= 15968162087363060
     * 参数	userId:删除用户的id
     * 结果	删除成功时：
     * 1
     * 删除失败时:
     * 0
     */
    int deleteUserById(@Param("userId") String userId);

    /**
     * url	/user/getRowCount?userName=z&userSex=男
     * 参数	userName:表单中用户名称
     * userSex:表单中用户性别
     * 结果	有数据时:
     * 12
     * 无数据时:
     * 0
     */
    int getRowCount(@Param("userName") String userName, @Param("userSex") String userSex);

}
